package com.itheima.lambda.test2;

public class TestLambda {
    /*
        Lambda表达式的使用前提
            1. 一个接口
            2. 接口中有且仅有一个抽象方法

        练习1：
            1. 编写一个接口（ShowHandler）
            2. 在该接口中存在一个抽象方法（show），该方法是无参数无返回值
            3. 在测试类（ShowHandlerDemo）中存在一个方法（useShowHandler）
                        方法的的参数是ShowHandler类型的
                        在方法内部调用了ShowHandler的show方法
     */
    public static void main(String[] args) {
        // Lambda实现: lambda关注的点只有怎么做,关注的其实就是要怎么重写接口的抽象方法
        /*
            lambda书写格式要求:
                () : 写要重写的方法的形参列表,和接口的抽象方法的形参列表严格保持一致
                -> : 这个东西就是Lambda中的固定语法格式,用来拼接()和方法体{}
                {}: 这里面放的就是对接口的抽象方法进行重写的方法体逻辑代码
         */
        useShowHandler( () -> System.out.println("我是Lambda中的show方法"));
    }

    public static ShowHandler useShowHandler(ShowHandler showHandler){
        // ShowHandler showHandler =  () -> {System.out.println("我是Lambda中的show方法");}
        showHandler.show();
        //方法的返回值类型是接口类型,方法中要return该接口的实现类对象
        return ()->{};
    }
}

//函数式接口
@FunctionalInterface
interface ShowHandler {
    void show();
}